home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks95 / IsNative.sit / Is Native / My68KGet1Rsrc.c < prev    next >
C/C++ Source or Header  |  1995-06-24  |  2KB  |  88 lines

  1. //
  2. // File:    My68KGet1Rsrc.c
  3. // Project:    IsNative.π
  4. // Author:    Glenn L. Austin
  5. //            Symantec Corporation
  6. //
  7. #include "IsNative.h"
  8.  
  9. static Boolean inCheckRsrc = false;
  10.  
  11. void CheckRsrc(Handle rsrc, short id, ResType rType)
  12. {
  13.     if (inCheckRsrc)        // I end up calling myself, so don't do anything if so...
  14.         return;
  15.     
  16.     if (!rsrc)
  17.         return;                // if there isn't the resource, go ahead and return immediately
  18.     
  19.     if ((*(Byte*) LMGetCurApName() < 32) && (!id && ((rType == 'cfrg') || (rType == 'CODE'))) &&
  20.             !FindAppInfo(LMGetCurApName()))
  21.     {
  22.         THz            cZone = GetZone();
  23.         MyAppInfo    appInfo;
  24.         Handle        h;
  25.         short        oldResLoad;
  26.         
  27.         BlockMove(LMGetCurApName(), &appInfo.appName, sizeof(Str31));
  28.         appInfo.flags = 0;
  29.         if (rType == 'cfrg')
  30.         {
  31.             appInfo.flags |= kIsNative;
  32.         
  33.             oldResLoad = LMGetResLoad();
  34.             SetResLoad(false);
  35.             inCheckRsrc = true;
  36.             h = Get1Resource('CODE', 0);        // check for 68K code...
  37.             inCheckRsrc = false;
  38.             LMSetResLoad(oldResLoad);
  39.             
  40.             if (appInfo.flags && h)
  41.                 appInfo.flags |= kHas68K;
  42.         }
  43.         
  44.         SetZone(SystemZone());
  45.         PtrAndHand((Ptr) &appInfo, (Handle) glob->appInfo, sizeof(MyAppInfo));
  46.         SetZone(cZone);
  47.     }
  48. }
  49.  
  50. void MyGet1Resource(void)
  51. {
  52.     asm {
  53.         Link    A6,#-12                ; stack frame looks like: A6.L, (4)retAddr.L, (8)id.W, (10)type.L
  54.         
  55.         Movem.L    D0/A0,-8(A6)
  56.         
  57.         Jsr        SetA4World
  58.         Move.L    D0,-12(A6)
  59.         
  60.         Clr.L    -(SP)
  61.         Move.L    10(A6),-(SP)
  62.         Move    8(A6),-(SP)
  63.         Pea        @1
  64.         Move.L    glob,A0
  65.         Move.L    OFFSET(MyGlobals,oldG1RTrap)(A0),-(SP)
  66.         Movem.L    -8(A6),D0/A0
  67.         Move.L    -12(A6),A4
  68.         Move.L    (A6),A6                ; clean up A6
  69.         Rts                            ; on return, stack looks like:  handle.L, oldA4.L, D0.L, A1.L, A6.L
  70. @1        Lea        8+8(SP),A6
  71.         Move.L    (SP)+,14(A6)
  72.         Movem.L    D0-D2/A0-A1,-(SP)
  73.         Jsr        SetA4World
  74.         Move.L    10(A6),-(SP)
  75.         Move    8(A6),-(SP)
  76.         Move.L    14(A6),-(SP)
  77.         Bsr        CheckRsrc
  78.         Lea        10(SP),SP
  79.         Movem.L    (SP)+,D0-D2/A0-A1
  80.         
  81.         Move.L    -12(A6),A4
  82.         Unlk    A6
  83.         
  84.         Move.L    (SP)+,2(SP)            ; I could use RTD #6, if it only existed on the 68000...
  85.         Addq    #2,SP
  86.     }
  87. }
  88.